import {_decorator, Component, Node, resources, Prefab, instantiate, tween, CCInteger} from 'cc';
import {BirdController} from "db://assets/scripts/hitBird/BirdController";
import {ScoreController} from "db://assets/scripts/hitBird/ScoreController";

const {ccclass, property} = _decorator;

@ccclass('BirdManagerController')
export class BirdManagerController extends Component {
    /**
     * 延时时间（时间单位：秒）
     */
    @property(CCInteger)
    delayTime: number = 3;
    /**
     * 分数节点
     */
    @property(ScoreController)
    scoreController: ScoreController = null;

    start() {
        // 自动刷怪
        // 方式一
        /*setInterval(() => {
            this.brush();
        }, 3000);*/

        // 方式二
        let brushTween = tween(this.node).delay(this.delayTime).call(() => {
            this.brush();
        });
        tween(this.node).repeatForever(brushTween).start();
    }

    /**
     * 刷怪
     */
    private brush() {
        // 加载预设体
        resources.load("prefabs/bird", Prefab, (err: Error, data: Prefab) => {
            // 当资源加载成功时
            if (!err) {
                // 鸟
                let bird = instantiate(data);
                // 设置父节点
                bird.setParent(this.node);
                // 为什么要设置回调加分？
                // 1.统一管理，所有小鸟都有加分，单独写不便于管理，统一写便于管理
                // 2.预设体无法挂载分数的脚本，而普通对象可以挂载其他对象的脚本
                // 所以，我们选择在鸟的管理脚本上挂载分数的脚本，以此来实现加分
                // 设置加分的回调
                bird.getComponent(BirdController).addScore = () => {
                    this.scoreController.add(10);
                };
            }
        });
    }

    update(deltaTime: number) {

    }
}

